package org.dromara.admin.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * 模板分类枚举类 : 发货单（DELIVERY）、进货单（PURCHASE）、报价单（QUOTATION）、销售单（SALES）、采购单（PROCUREMENT）、对账单（STATEMENT）、退货单（RETURN）、物流单（LOGISTICS）
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT) // ✅ 序列化为对象形式（code + info）
public enum TemplateCategoryEnum {

    DELIVERY("DELIVERY", "发货单"),
    PURCHASE("PURCHASE", "进货单"),
    QUOTATION("QUOTATION", "报价单"),
    SALES("SALES", "销售单"),
    PROCUREMENT("PROCUREMENT", "采购单"),
    STATEMENT("STATEMENT", "对账单"),
    RETURN("RETURN", "退货单"),
    LOGISTICS("LOGISTICS", "物流单"),
    PAYMENT("PAYMENT", "缴费单"),
    SALARY("SALARY", "工资单"),
    DELIVERY_NOTE("DELIVERY_NOTE", "送货单");

    @EnumValue
    @JsonValue
    private final String code;
    private final String info;

    TemplateCategoryEnum(String code, String info) {
        this.code = code;
        this.info = info;
    }

    /**
     * 前端传 code 时反序列化
     */
    @JsonCreator
    public static TemplateCategoryEnum fromCode(String code) {
        if (code == null) return null;
        for (TemplateCategoryEnum e : values()) {
            if (e.code.equalsIgnoreCase(code)) {
                return e;
            }
        }
        return null;
    }

    /**
     * 返回前端时使用对象结构（code + info）
     */
    @JsonValue
    public Map<String, String> toJson() {
        Map<String, String> map = new HashMap<>();
        map.put("code", this.code);
        map.put("info", this.info);
        return map;
    }
}
